import pandas as pd
import json
import os

def csv_to_json(input_csv, output_json=None, add_hightech=False):
    """
    将CSV文件转换为JSON格式
    
    参数:
        input_csv: 输入的CSV文件路径
        output_json: 输出的JSON文件路径（可选）
        add_hightech: 是否添加hightech字段（默认为False）
    """
    # 如果没有指定输出文件，则使用CSV文件名（替换扩展名）
    if output_json is None:
        base_name = os.path.splitext(os.path.basename(input_csv))[0]
        output_json = f"{base_name}.json"
    
    try:
        # 读取CSV文件（自动处理编码问题）
        df = pd.read_csv(input_csv, encoding_errors='ignore')
    except Exception as e:
        print(f"读取文件 {input_csv} 时出错: {e}")
        return
    
    # 处理缺失值 - 将NaN替换为空字符串
    df = df.fillna('')
    
    # 将DataFrame转换为字典（orient='records'表示每行一个对象）
    data = df.to_dict(orient='records')
    
    # 如果需要添加hightech字段
    if add_hightech:
        print("正在为所有记录添加hightech字段...")
        for item in data:
            item["hightech"] = "0"
    
    # 保存为JSON文件 - 使用自定义编码器处理空值
    try:
        with open(output_json, 'w', encoding='utf-8') as f:
            # 使用自定义JSON编码器确保空值保留为空字符串
            json.dump(data, f, ensure_ascii=False, indent=2, cls=CustomJSONEncoder)
        print(f"转换完成，结果已保存为 '{output_json}'")
        print(f"共转换 {len(data)} 条记录")
    except Exception as e:
        print(f"保存JSON文件时出错: {e}")

# 自定义JSON编码器，确保空值保留为空字符串
class CustomJSONEncoder(json.JSONEncoder):
    def default(self, obj):
        # 处理空值
        if pd.isna(obj):  # 处理pandas的NaN值
            return ""
        elif obj is None:  # 处理Python的None值
            return ""
        elif isinstance(obj, float) and obj == 0:  # 处理值为0的浮点数
            return ""
        elif obj == "":  # 处理空字符串
            return ""
        # 其他类型按默认方式处理
        return json.JSONEncoder.default(self, obj)

# 使用示例
if __name__ == "__main__":
    # 设置输入输出路径
    input_file = "./updated_file_merged_bk.csv"  # 替换为你的CSV文件路径
    output_file = 'enterprise.json'  # 设为None会自动生成输出文件名，或指定自定义路径
    
    # 是否添加hightech字段（True/False）
    should_add_hightech = False
    
    # 调用函数
    csv_to_json(input_file, output_file, add_hightech=should_add_hightech)